package com.zw.mes.module.tecard.controller;


import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.zw.mes.base.BaseController;
import com.zw.mes.common.JsonResult;
import com.zw.mes.entity.flow.FlowSheet;
import com.zw.mes.entity.technology.Result;
import com.zw.mes.entity.technology.Tecard;
import com.zw.mes.module.cost.service.DictCommonService;
import com.zw.mes.module.prodtaskmanager.entity.ProdOrd;
import com.zw.mes.module.prodtaskmanager.entity.VwProject;
import com.zw.mes.module.tecard.service.TecardService;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;


import java.util.List;

import static com.zw.mes.constant.Constant.GROUP_SPECTYPE;

/**
 * @author mayongfeng
 * @version 1.0.0
 * @ClassName TecardController.java
 * @Description TODO
 * @createTime 2021年03月10日 14:20:00
 */
@Controller
@SuppressWarnings("all")
@RequestMapping("/tecard")
public class TecardController extends BaseController {

    @Autowired
    private DictCommonService dictCommonService;

    @Autowired
    private TecardService tecardService;

    /**
     * @Author mayongfeng
     * @Date 14:15 2021/1/29
     * @Description 页面跳转到工艺卡接收
     **/
    @GetMapping
    public String listPage(Model model, Result result) {
        model.addAttribute("special", dictCommonService.findDictByGroupName(GROUP_SPECTYPE));
        return "technology/card/listPage";
    }

    /**
     * @Author mayongfeng
     * @Date 14:15 2021/1/29
     * @Description 页面跳转到外购件计划分配
     **/
    @GetMapping("/jump")
    public String jumpCard(String proCode, String special, String part, String recStatus, Integer id, Model model) {
        model.addAttribute("proCodeId", proCode);
        VwProject project = tecardService.getVwProjectByProCode(proCode);
        model.addAttribute("proName", project.getProName());
        model.addAttribute("proNum", project.getProQty());
        model.addAttribute("proCodeId", proCode);
        model.addAttribute("special", special);
        model.addAttribute("part", part);
        model.addAttribute("recStatus", recStatus);
//        model.addAttribute("prodChange",prodChange);
        model.addAttribute("id", id);
        return "technology/card/cardDetail";
    }

//    /**
//     * @methodName: jumpCard
//     * @description: 跳转到页面
//     * @param: ids
//     * @param: model
//     * @return： java.lang.String
//     * @exception：
//     * @author： 徐一贺 tel:18341916590
//     * @designer： 陈欣
//     * @leader： 陈欣 tel:18104194240
//     * @date： 2021/5/29 9:55
//     * @office: 智能控制设计科
//     * @research institute： 智能控制设计所
//     * @department： 机械设计院
//     * @company: 辽宁忠旺机械设备制造有限公司
//     * @group： 忠旺集团
//     * @version: 1.0
//     */
//    @GetMapping("/jump")
//    public String jumpCard(Tecard tecard,Model model){
//        model.addAttribute("tecard", tecard);
//        return "technology/card/cardDetail";
//    }

//    /**
//     * @Author mayongfeng
//     * @Date 9:05 2021/3/11
//     * @Description 查询工艺卡接收列表页
//     *
//     **/
//    @ResponseBody
//    @PostMapping("/list")
//    public JsonResult cardList(Tecard tecard){
//        startPage();
//        List<Tecard> tecardList = tecardService.getCardRevice(tecard);
//        return jsonResult(tecardList);
//    }

    /**
     * @methodName: cardList
     * @description: 徐一贺
     * @param: tecard
     * @return： com.zw.mes.common.JsonResult
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/5/29 9:28
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    @ResponseBody
    @PostMapping("/listGroupBy")
    public JsonResult listGroupBy(Tecard tecard) {
        startPage();
        List<Tecard> tecardList = tecardService.getGroupByCardRevice(tecard);
        return jsonResult(tecardList);
    }


    /**
     * @Author mayongfeng
     * @Date 9:05 2021/3/11
     * @Description 查询项目下所有图号的工艺卡
     **/
    @PostMapping("/selectMakeDetail")
    @ResponseBody
    public JsonResult selectMakeDetail(Tecard tecard) {
        startPage();
        List<Tecard> tecardList = tecardService.getMakeDetail(tecard);
        return jsonResult(tecardList);
    }

    /**
     * 生产已接收的工艺卡允许通过权限分配进行删除，判断工艺卡删除没有任何逻辑，删除后不能回复
     */
    @ResponseBody
    @PostMapping("/del")
    @RequiresPermissions({"est:cardList:del"})
    public JsonResult delCard(Integer id) {
        FlowSheet flowSheet = tecardService.getFlowSheetId(id);
        int i = tecardService.delFlowSheetCard(flowSheet);
        return jsonResult(i);
    }


    /**
     * @methodName: getCardNum
     * @description: 获取工艺卡数量，领导因与工艺卡打印对数量而显示的，
     * 此查询条件与上面的selectMakeDetail方法的查询条件要相同。
     * @param: tecard
     * @return： com.zw.mes.common.JsonResult
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/5/28 16:14
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    @PostMapping("/getCardNum")
    @ResponseBody
    public JsonResult getCardNum(Tecard tecard) {
        return success().setData(tecardService.getCardNum(tecard));
    }


    /**
     * 查询每个图号工艺卡的明细
     */
    @GetMapping("/full/{id}")
    public String print(@PathVariable("id") Integer id, Model model) {
        model.addAttribute("card", tecardService.getCardById(id));
        model.addAttribute("details", tecardService.findCardDetailByCardId(id));
        return "technology/card/full";
    }

    /**
     * @Author mayongfeng
     * @Date 15:19 2021/3/12
     * @Description 工艺卡接收方法
     **/
    @PostMapping("/cardReceive")
    @ResponseBody
    public JsonResult cardReceive(String tecards) {
        Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm").create();
        Tecard tecard = gson.fromJson(tecards, Tecard.class);
        List<ProdOrd> prodOrdList = tecardService.findProdOrdByProdCod(tecard.getProCode());
        if (prodOrdList.size() == 0) {
            return error("该项目未创建生产令无法接收工艺卡。");
        } else {
            for (int i = 0; i < prodOrdList.size(); i++) {
                if (prodOrdList.get(i).getProdSta() == 1) {
                    return error("该项目的生产令未下达无法接收工艺卡。");
                }
                if (prodOrdList.get(i).getProdManSta() == 2) {
                    return error("该项目的生产令已终止无法接收工艺卡。");
                }
            }
        }
        //检测是否可以变更工艺卡
        String checkResult = tecardService.checkIfChangeTecCaed(tecard);
        int i = 0;
        if ("pass".equals(checkResult)) {
            i = tecardService.cardReceive(tecard);
            return jsonResult(i);
        } else {
            return error(checkResult);
        }
    }

/***********************************************工艺卡打印，工艺卡查询**************************************************/
    /**
     * @Author mayongfeng
     * @Date 14:15 2021/1/29
     * @Description 页面跳转到工艺卡查询
     **/
    @GetMapping("/print")
    public String printPage(Model model, Result result) {
        model.addAttribute("specials", dictCommonService.findDictByGroupName(GROUP_SPECTYPE));
        return "technology/card/listPrint";
    }

    /**
     * 打印工艺卡列表
     */
    @ResponseBody
    @PostMapping("query/list")
    public JsonResult cardPrintList(Tecard tecard) {
        startPage();
        List<FlowSheet> list = tecardService.findWithCardQuery(tecard);
        return jsonResult(list);
    }

    /**
     * @Author mayongfeng
     * @Date 13:39 2021/3/17
     * @Description 批量打印
     **/
    @GetMapping("print/p")
    public String print(Integer[] ids, Model model) {
        model.addAttribute("cards", tecardService.findCardListFull(ids));
        return "technology/card/print";
    }

    /**
     * 查询生产的每个图号工艺卡的明细
     */
    @GetMapping("/selectProdCard/{id}")
    public String selectProdCard(@PathVariable("id") Integer id, Model model) {
        model.addAttribute("card", tecardService.getProdCardById(id));
        model.addAttribute("details", tecardService.findProdCardDetailByCardId(id));
        return "technology/card/prodFull";
    }


}
